package main

import (
	"context"
	"fmt"
	"github.com/coreos/etcd/clientv3"
	"time"
)

func main() {
	cli, err := clientv3.New(clientv3.Config{Endpoints: []string{"localhost:2379"},
		DialTimeout: 5 * time.Second,
	})
	if err != nil {
		fmt.Println(err)
	}
	kv := clientv3.NewKV(cli)
	ctx, cancel := context.WithTimeout(context.Background(), time.Second)
	defer cancel()

	// 先找出CreateVersion大于33的所有key，然后从这些key中找出CreateVersion最小的那个key
	getOpts := append(clientv3.WithFirstCreate(), clientv3.WithMinCreateRev(33))
	getResp, _ := kv.Get(ctx, "/user/", getOpts...)
	fmt.Println(getResp.Kvs[0])

	// 先找出CreateVersion大于33的所有key，然后从这些key中找出key的名称排序最小的那个key
	getOpts2 := append(clientv3.WithFirstKey(), clientv3.WithMinCreateRev(33))
	getResp2, _ := kv.Get(ctx, "/user/", getOpts2...)
	fmt.Println(getResp2.Kvs[0])

	// 先找出CreateVersion小于33的所有key，然后从这些key中找出CreateVersion最大的那个key
	getOpts3 := append(clientv3.WithLastCreate(), clientv3.WithMaxCreateRev(33))
	getResp3, _ := kv.Get(ctx, "/user/", getOpts3...)
	fmt.Println(getResp3.Kvs[0])

	// 先找出CreateVersion大于33的所有key，然后从这些key中找出key的名称排序最小的那个key
	getOpts4 := append(clientv3.WithLastKey(), clientv3.WithMaxCreateRev(33))
	getResp4, _ := kv.Get(ctx, "/user/", getOpts4...)
	fmt.Println(getResp4.Kvs[0])
}
